package analizador;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Analizador {

	static final String HTML = "<HTML>";
	static final String PAGINA = "Pagina";
	static boolean inicio = false;
	static final String HTMLFIN = "</HTML>";
	static final String CABECERA = "Encabezado";
	static final String HTMLCABECERA = "<HEAD>";
	static boolean cabecera = false;
	static boolean tienecuerpo = false;
	static final String HTMLCABECERAFIN = "</HEAD>";
	static final String CUERPO = "Cuerpo";
	static final String HTMLCUERPO = "<BODY>";
	static boolean cuerpo = false;
	static final String HTMLCUERPOFIN = "</BODY>";
	static final String TITULO = "Titulo";
	static final String HTMLTITULO = "<TITLE>";
	static final String TITULOFIN = "FinTitulo";
	static final String HTMLTITULOFIN = "</TITLE>";
	static final String AUTOR = "Autor";
	static final String HTMLAUTOR = "<meta name=\"Autor\" content=\"";
	static final String AUTORFIN = "FinAutor";
	static final String HTMLAUTORFIN = "\">";
	static final String NEGRITA = "Negrita";
	static final String HTMLNEGRITA = "<B>";
	static final String NEGRITAFIN = "FinNegrita";
	static final String HTMLNEGRITAFIN = "</B>";
	static final String CURSIVA = "Cursiva";
	static final String HTMLCURSIVA = "<I>";
	static final String CURSIVAFIN = "FinCursiva";
	static final String HTMLCURSIVAFIN = "</I>";
	static final String SUBRAYADO = "Subrayado";
	static final String HTMLSUBRAYADO = "<U>";
	static final String SUBRAYADOFIN = "FinSubrayado";
	static final String HTMLSUBRAYADOFIN = "</U>";
	static final String SANGRADO = "Sangrado";
	static final String HTMLSANGRADO = "<BLOCKQUOTE>";
	static final String SANGRADOFIN = "FinSangrado";
	static final String HTMLSANGRADOFIN = "</BLOCKQUOTE>";
	static final String CENTRADO = "Centrado";
	static final String HTMLCENTRADO = "<CENTER>";
	static final String CENTRADOFIN = "FinCentrado";
	static final String HTMLCENTRADOFIN = "</CENTER>";
	static final String LINEA = "Linea";
	static final String HTMLLINEA = "<HR>";
	static final String SALTO = "Salto";
	static final String HTMLSALTO = "<BR>";
	static final String COMENTARIO = "(*";
	static final String HTMLCOMENTARIO = "<!--";
	static final String COMENTARIOFIN = "*)";
	static final String HTMLCOMENTARIOFIN = "--!>";
	static final String LISTA = "Lista";
	static final String HTMLLISTA = "<OL>";
	static final String LISTAFIN = "FinLista";
	static final String HTMLLISTAFIN = "</OL>";
	static final String ELEMENTOLISTA = "ElementoLista";
	static final String HTMLELEMENTOLISTA = "<LI>";
	static final String ELEMENTOLISTAFIN = "FinElementoLista";
	static final String HTMLELEMENTOLISTAFIN = "</LI>";
	static final String ENLACE = "Enlace";
	static final String HTMLENLACE = "<A HREF";
	static final String ENLACEFIN = "FinEnlace";
	static final String HTMLENLACEFIN = "</A>";
	static final String CON = "Con";
	static final String HTMLCON = "=\"";
	static final String CONFIN = "FinCon";
	static final String HTMLCONFIN = "\"";
	static final String MOSTRAR = "Mostrar";
	static final String HTMLMOSTRAR = ">";
	static final String MOSTRARFIN = "FinMostrar";
	static final String HTMLMOSTRARFIN = "";

	static boolean error = false;

	public static void main(String[] args) throws ClassNotFoundException {
		if (args.length != 0) {

			String nombreArchivo = args[0];
			System.out.println(nombreArchivo);
			File archivo = null;
		    FileReader fr = null;
		    BufferedReader br = null;
			
			FileWriter os = null;
			try {
				
				archivo = new File (nombreArchivo);
				fr = new FileReader (archivo);
				br = new BufferedReader(fr);
				
				
				
				String linea1;

				os = new FileWriter("Pagina.html");

				// String palabras =
				// "Pagina Encabezado Titulo Este es el titulo FinTitulo Autor David Espinel FinAutor Cuerpo Esta es la primera pagina de prueba Salto y Negrita tiene varias cosas FinNegrita Lista ElementoLista david espinel FinElementoLista ElementoLista cristian jimenez FinElementoLista FinLista Enlace Con http://www.unal.edu.co FinCon Mostrar Mi universidad FinMostrar FinEnlace";
				// String palabras =
				// "Pagina Encabezado Titulo Este es el titulo FinTitulo";
				
				System.out.println("Inicia proceso de cambio de lenguaje \n\n");

				while ((linea1=br.readLine())!=null){
					String temporal=(String)linea1.trim();
					
					if (temporal.equals(PAGINA) || inicio == true) {
						inicio = true;

						if (temporal.equals(PAGINA)) {
							System.out.println(HTML);
							os.write(HTML);
						} else {
							if (temporal.equals(CABECERA)) {
								cabecera = true;
								System.out.println(HTMLCABECERA);
								os.write(HTMLCABECERA);
							} else {
								if (temporal.equals(CUERPO)) {
									if (cabecera == true) {
										cabecera = false;
										System.out.println(HTMLCABECERAFIN);
										os.write(HTMLCABECERAFIN);
									}
									cuerpo = true;
									tienecuerpo = true;
									System.out.println(HTMLCUERPO);
									os.write(HTMLCUERPO);
								} else {
									if (cabecera == true) {
										switch (temporal) {
										case TITULO:
											System.out.print(HTMLTITULO);
											os.write(HTMLTITULO);
											break;
										case TITULOFIN:
											System.out.println(HTMLTITULOFIN);
											os.write(HTMLTITULOFIN);
											break;
										case AUTOR:
											System.out.println(HTMLAUTOR);
											os.write(HTMLAUTOR);
											break;
										case AUTORFIN:
											System.out.println(HTMLAUTORFIN);
											os.write(HTMLAUTORFIN);
											break;
										default:
											System.out.print(temporal + " ");
											os.write(temporal + " ");
										}
									} else {
										if (cuerpo == true) {
											switch (temporal) {
											case NEGRITA:
												System.out.print(HTMLNEGRITA);
												os.write(HTMLNEGRITA);
												break;
											case NEGRITAFIN:
												System.out
														.println(HTMLNEGRITAFIN);
												os.write(HTMLNEGRITAFIN);
												break;
											case CURSIVA:
												System.out.print(HTMLCURSIVA);
												os.write(HTMLCURSIVA);
												break;
											case CURSIVAFIN:
												System.out
														.println(HTMLCURSIVAFIN);
												os.write(HTMLCURSIVAFIN);
												break;
											case SUBRAYADO:
												System.out.print(HTMLSUBRAYADO);
												os.write(HTMLSUBRAYADO);
												break;
											case SUBRAYADOFIN:
												System.out
														.println(HTMLSUBRAYADOFIN);
												os.write(HTMLSUBRAYADOFIN);
												break;
											case SANGRADO:
												System.out
														.println(HTMLSANGRADO);
												os.write(HTMLSANGRADO);
												break;
											case SANGRADOFIN:
												System.out
														.println(HTMLSANGRADOFIN);
												os.write(HTMLSANGRADOFIN);
												break;
											case CENTRADO:
												System.out
														.println(HTMLCENTRADO);
												os.write(HTMLCENTRADO);
												break;
											case CENTRADOFIN:
												System.out
														.println(HTMLCENTRADOFIN);
												os.write(HTMLCENTRADOFIN);
												break;
											case LINEA:
												System.out.println(HTMLLINEA);
												os.write(HTMLLINEA);
												break;
											case SALTO:
												System.out.println(HTMLSALTO);
												os.write(HTMLSALTO);
												break;
											case LISTA:
												System.out.println(HTMLLISTA);
												os.write(HTMLLISTA);
												break;
											case LISTAFIN:
												System.out
														.println(HTMLLISTAFIN);
												os.write(HTMLLISTAFIN);
												break;
											case ELEMENTOLISTA:
												System.out
														.println(HTMLELEMENTOLISTA);
												os.write(HTMLELEMENTOLISTA);
												break;
											case ELEMENTOLISTAFIN:
												System.out
														.println(HTMLELEMENTOLISTAFIN);
												os.write(HTMLELEMENTOLISTAFIN);
												break;
											case ENLACE:
												System.out.println(HTMLENLACE);
												os.write(HTMLENLACE);
												break;
											case ENLACEFIN:
												System.out
														.println(HTMLENLACEFIN);
												os.write(HTMLENLACEFIN);
												break;
											case CON:
												System.out.println(HTMLCON);
												os.write(HTMLCON);
												break;
											case CONFIN:
												System.out.println(HTMLCONFIN);
												os.write(HTMLCONFIN);
												break;
											case MOSTRAR:
												System.out.println(HTMLMOSTRAR);
												os.write(HTMLMOSTRAR);
												break;
											case MOSTRARFIN:
												System.out
														.println(HTMLMOSTRARFIN);
												os.write(HTMLMOSTRARFIN);
												break;
											default:
												System.out
														.print(temporal + " ");
												os.write(temporal + " ");
											}
										} else {
											System.out
													.println("Error, el string "
															+ temporal
															+ " no esta en una posicion valida");
											os.write("Error, el string "
													+ temporal
													+ " no esta en una posicion valida");
											error = true;
											break;
										}
									}
								}
							}

						}
					} else {
						System.out.println("Error, el string " + temporal
								+ " no esta en una posicion valida");
						os.write("Error, el string " + temporal
								+ " no esta en una posicion valida");
						error = true;
						break;
					}

					/*
				*/
					os.write("\t");

				}
				if (error == false) {
					if (tienecuerpo == false) {
						System.out.println(HTMLCABECERAFIN);
						os.write(HTMLCABECERAFIN);
					}
					if (tienecuerpo == true) {
						System.out.println(HTMLCUERPOFIN);
						os.write(HTMLCUERPOFIN);
					}
					System.out.println(HTMLFIN);
					os.write(HTMLFIN);
				}

				

			} catch (FileNotFoundException ex) {
				Logger.getLogger(Analizador.class.getName()).log(Level.SEVERE,
						null, ex);
			} catch (IOException ex) {
				Logger.getLogger(Analizador.class.getName()).log(Level.SEVERE,
						null, ex);
			}
			finally{
		         try{                    
		            if( null != fr ){   
		               fr.close();
		               os.close();
		            }                  
		         }catch (Exception e2){ 
		            e2.printStackTrace();
		         }}
		} else {
			System.out
					.println("No se han encontrado elementos como argumentos");
		}
		
	}
}
